package com.kabao.demo;

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 拦截器配置 只拦截/bst相关的url
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {


    // 2. 注册拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 拦截所有请求
        registry.addInterceptor(new SignInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/error")
                .order(3);
    }

    /**
     * 注册RequestWrapperFilter过滤器
     * 确保其在所有过滤器中最先执行，优先包装请求
     */
    @Bean
    public FilterRegistrationBean<RequestWrapperFilter> requestWrapperFilter() {
        FilterRegistrationBean<RequestWrapperFilter> registrationBean = new FilterRegistrationBean<>();
        // 设置过滤器实例
        registrationBean.setFilter(new RequestWrapperFilter());
        // 指定过滤的URL路径（/* 表示所有请求）
        registrationBean.addUrlPatterns("/*");
        // 设置过滤器执行顺序（数字越小，优先级越高）
        // 必须确保此过滤器是第一个执行的，避免其他过滤器先读取原始流
        registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
        // 可选：设置过滤器名称
        registrationBean.setName("requestWrapperFilter");
        return registrationBean;
    }

}